//package com.lsk.util;
//
//import com.lsk.bean.Unifiedorder;
//import jdk.internal.org.xml.sax.InputSource;
//import org.jdom.Element;
//import org.jdom.JDOMException;
//import org.jdom.input.SAXBuilder;
//
//import javax.annotation.Resource;
//import java.io.*;
//import java.net.HttpURLConnection;
//import java.net.MalformedURLException;
//import java.net.ProtocolException;
//import java.net.URL;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import com.wellness.platfront.entity.weixin.Transfers;
//
///**
// * post提交xml格式的参数
// * @author
// * @date 2017/08/10
// */
//public class HttpXmlUtils {
//    /**
//     * 开始post提交参数到接口
//     * 并接受返回
//     * @param url
//     * @param xml
//     * @param method
//     * @param contentType
//     * @return
//     */
//    public static String xmlHttpProxy(String url,String xml,String method,String contentType){
//        InputStream is = null;
//        OutputStreamWriter os = null;
//        try {
//            URL _url = new URL(url);
//            HttpURLConnection conn = (HttpURLConnection) _url.openConnection();
//            conn.setDoInput(true);
//            conn.setDoOutput(true);
//            conn.setRequestProperty("Content-type", "text/xml");
//            conn.setRequestProperty("Pragma:", "no-cache");
//            conn.setRequestProperty("Cache-Control", "no-cache");
//            conn.setRequestMethod("POST");
//            os = new OutputStreamWriter(conn.getOutputStream());
//            os.write(new String(xml.getBytes(contentType)));
//            os.flush();
//            //返回值
//            is = conn.getInputStream();
//            return getContent(is, "utf-8");
//        } catch (MalformedURLException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally{
//            try {
//                if(os!=null){os.close();}
//                if(is!=null){is.close();}
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        return null;
//    }
//    /**
//     * 解析返回的值
//     * @param is
//     * @param charset
//     * @return
//     */
//    public static String getContent(InputStream is, String charset) {
//        String pageString = null;
//        InputStreamReader isr = null;
//        BufferedReader br = null;
//        StringBuffer sb = null;
//        try {
//            isr = new InputStreamReader(is, charset);
//            br = new BufferedReader(isr);
//            sb = new StringBuffer();
//            String line = null;
//            while ((line = br.readLine()) != null) {
//                sb.append(line + "\n");
//            }
//            pageString = sb.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                if (is != null){
//                    is.close();
//                }
//                if(isr!=null){
//                    isr.close();
//                }
//                if(br!=null){
//                    br.close();
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//            sb = null;
//        }
//        return pageString;
//    }
//    /**
//     * 解析申请退款之后微信返回的值并进行存库操作
//     * @throws IOException
//     * @throws JDOMException
//     */
//    public static Map<String, String> parseRefundXml(String refundXml) throws JDOMException, IOException{
//        ParseXMLUtils.jdomParseXml(refundXml);
//        StringReader read = new StringReader(refundXml);
//        // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
//        InputSource source = new InputSource(read);
//        // 创建一个新的SAXBuilder
//        SAXBuilder sb = new SAXBuilder();
//        // 通过输入源构造一个Document
//        org.jdom.Document doc;
//        doc = (org.jdom.Document) sb.build(String.valueOf(source));
//        org.jdom.Element root = doc.getRootElement();// 指向根节点
//        List<Element> list = root.getChildren();
//        Map<String, String> refundOrderMap = new HashMap<String, String>();
//        if(list!=null&&list.size()>0){
//            for (org.jdom.Element element : list) {
//                refundOrderMap.put(element.getName(), element.getText());
//            }
//            return refundOrderMap;
//        }
//        return null;
//    }
//    /**
//     * 解析申请退款之后微信退款回调返回的字符串中内容
//     * @throws IOException
//     * @throws JDOMException
//     */
//    public static Map<String, String> parseRefundNotifyXml(String refundXml) throws JDOMException, IOException{
//        ParseXMLUtils.jdomParseXml(refundXml);
//        StringReader read = new StringReader(refundXml);
//        // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
//        InputSource source = new InputSource(read);
//        // 创建一个新的SAXBuilder
//        SAXBuilder sb = new SAXBuilder();
//        // 通过输入源构造一个Document
//        org.jdom.Document doc;
//        doc = (org.jdom.Document) sb.build(String.valueOf(source));
//        org.jdom.Element root = doc.getRootElement();// 指向根节点
//        List<org.jdom.Element> list = root.getChildren();
//        Map<String, String> resultMap = new HashMap<>();
//        if(list!=null&&list.size()>0){
//            for (org.jdom.Element element : list){
//                resultMap.put(element.getName(), element.getText());
//            }
//            return resultMap;
//        }
//        return null;
//    }
//    /**
//     * h5支付时 解析返回的值并返回prepareid
//     * @throws IOException
//     * @throws JDOMException
//     */
//    public static Map<String, String> getUrl(Unifiedorder unifiedorder) throws JDOMException, IOException{
//        String xmlInfo = HttpXmlUtils.xmlH5Info(unifiedorder);
//        String wxUrl = weixinConstant.URL;
//        String method = "POST";
//        String weixinPost = HttpXmlUtils.httpsRequest(wxUrl, method, xmlInfo).toString();
//        ParseXMLUtils.jdomParseXml(weixinPost);
//        StringReader read = new StringReader(weixinPost);
//        // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
//        InputSource source = new InputSource(read);
//        // 创建一个新的SAXBuilder
//        SAXBuilder sb = new SAXBuilder();
//        // 通过输入源构造一个Document
//        org.jdom.Document doc;
//        doc = (org.jdom.Document) sb.build(String.valueOf(source));
//        org.jdom.Element root = doc.getRootElement();// 指向根节点
//        List<org.jdom.Element> list = root.getChildren();
//        String prepayId =null;
//        Map<String, String> msg = new HashMap<String, String>();
//        if(list!=null&&list.size()>0){
//            for (org.jdom.Element element : list) {
//                msg.put(element.getName(), element.getText());
//            }
//        }
//        return msg;
//    }
//    /**
//     * 解析返回的值并返回prepareid
//     * @throws IOException
//     * @throws JDOMException
//     */
//    public static String getPrepareId(Unifiedorder unifiedorder) throws JDOMException, IOException{
//        String xmlInfo = HttpXmlUtils.xmlInfo(unifiedorder);
//        String wxUrl = weixinConstant.URL;
//        String method = "POST";
//        String weixinPost = HttpXmlUtils.httpsRequest(wxUrl, method, xmlInfo).toString();
//        ParseXMLUtils.jdomParseXml(weixinPost);
//        StringReader read = new StringReader(weixinPost);
//        // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
//        InputSource source = new InputSource(read);
//        // 创建一个新的SAXBuilder
//        SAXBuilder sb = new SAXBuilder();
//        // 通过输入源构造一个Document
//        org.jdom.Document doc;
//        doc = (org.jdom.Document) sb.build(source);
//        org.jdom.Element root = doc.getRootElement();// 指向根节点
//        List<org.jdom.Element> list = root.getChildren();
//        String prepayId =null;
//        if(list!=null&&list.size()>0){
//            for (org.jdom.Element element : list) {
//                if ( "prepay_id".equals(element.getName())) {
//                    prepayId= element.getText();
//                    break;
//                }
//            }
//        }
//        return prepayId;
//    }
//    /**
//     * 向微信发送企业付款请求并解析返回结果
//     * @throws IOException
//     * @throws JDOMException
//     */
//    public static Map<String, String> getTransfersMap(Transfers transfers) throws JDOMException, IOException{
//        String xmlInfo = HttpXmlUtils.xmlTransfer(transfers);
//        String wxUrl = weixinConstant.WITHDRAW_URL;
//        String method = "POST";
//        String weixinPost = HttpXmlUtils.httpsRequest(wxUrl, method, xmlInfo).toString();
//        ParseXMLUtils.jdomParseXml(weixinPost);
//        StringReader read = new StringReader(weixinPost);
//        // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
//        InputSource source = new InputSource(read);
//        // 创建一个新的SAXBuilder
//        SAXBuilder sb = new SAXBuilder();
//        // 通过输入源构造一个Document
//        org.jdom.Document doc;
//        doc = (org.jdom.Document) sb.build(String.valueOf(source));
//        org.jdom.Element root = doc.getRootElement();// 指向根节点
//        List<org.jdom.Element> list = root.getChildren();
//        Map<String, String> transferMap=new HashMap<>();
//        if(list!=null&&list.size()>0){
//            for (org.jdom.Element element : list) {
//                transferMap.put(element.getName(), element.getText());
//            }
//        }
//        return transferMap;
//    }
//    /**
//     * 构造退款xml参数
//     * @param xml
//     * @return
//     */
//    public static String refundXml(Unifiedorder unifiedorder){
//        xStream.autodetectAnnotations(true);
//        xStream.alias("xml", Unifiedorder.class);
//        return xStream.toXML(unifiedorder);
//    }
//    /**
//     * 构造企业付款xml参数
//     * @param xml
//     * @return
//     */
//    public static String transferXml(Transfers transfers){
//        xStream.autodetectAnnotations(true);
//        xStream.alias("xml", Transfers.class);
//        return xStream.toXML(transfers);
//    }
//    /**
//     * 构造xml参数
//     * @param xml
//     * @return
//     */
//    public static String xmlInfo(Unifiedorder unifiedorder){
//
//        if(unifiedorder!=null){
//            StringBuffer bf = new StringBuffer();
//            bf.append("<xml>");
//
//            bf.append("<appid><![CDATA[");
//            bf.append(unifiedorder.getAppid());
//            bf.append("]]></appid>");
//
//            bf.append("<mch_id><![CDATA[");
//            bf.append(unifiedorder.getMch_id());
//            bf.append("]]></mch_id>");
//
//            bf.append("<nonce_str><![CDATA[");
//            bf.append(unifiedorder.getNonce_str());
//            bf.append("]]></nonce_str>");
//
//            bf.append("<sign><![CDATA[");
//            bf.append(unifiedorder.getSign());
//            bf.append("]]></sign>");
//
//            bf.append("<body><![CDATA[");
//            bf.append(unifiedorder.getBody());
//            bf.append("]]></body>");
//
//            bf.append("<detail><![CDATA[");
//            bf.append(unifiedorder.getDetail());
//            bf.append("]]></detail>");
//
//            bf.append("<attach><![CDATA[");
//            bf.append(unifiedorder.getAttach());
//            bf.append("]]></attach>");
//
//            bf.append("<out_trade_no><![CDATA[");
//            bf.append(unifiedorder.getOut_trade_no());
//            bf.append("]]></out_trade_no>");
//
//            bf.append("<total_fee><![CDATA[");
//            bf.append(unifiedorder.getTotal_fee());
//            bf.append("]]></total_fee>");
//
//            bf.append("<spbill_create_ip><![CDATA[");
//            bf.append(unifiedorder.getSpbill_create_ip());
//            bf.append("]]></spbill_create_ip>");
//
//            bf.append("<time_start><![CDATA[");
//            bf.append(unifiedorder.getTime_start());
//            bf.append("]]></time_start>");
//
//            bf.append("<time_expire><![CDATA[");
//            bf.append(unifiedorder.getTime_expire());
//            bf.append("]]></time_expire>");
//
//            bf.append("<notify_url><![CDATA[");
//            bf.append(unifiedorder.getNotify_url());
//            bf.append("]]></notify_url>");
//
//            bf.append("<trade_type><![CDATA[");
//            bf.append(unifiedorder.getTrade_type());
//            bf.append("]]></trade_type>");
//
//            bf.append("</xml>");
//            return bf.toString();
//        }
//        return "";
//    }
//    /**
//     * 构造xml参数
//     * @param xml
//     * @return
//     */
//    public static String xmlH5Info(Unifiedorder unifiedorder){
//        if(unifiedorder!=null){
//            StringBuffer bf = new StringBuffer();
//            bf.append("<xml>");
//
//            bf.append("<appid><![CDATA[");
//            bf.append(unifiedorder.getAppid());
//            bf.append("]]></appid>");
//
//            bf.append("<mch_id><![CDATA[");
//            bf.append(unifiedorder.getMch_id());
//            bf.append("]]></mch_id>");
//
//            bf.append("<nonce_str><![CDATA[");
//            bf.append(unifiedorder.getNonce_str());
//            bf.append("]]></nonce_str>");
//
//            bf.append("<sign><![CDATA[");
//            bf.append(unifiedorder.getSign());
//            bf.append("]]></sign>");
//
//            bf.append("<body><![CDATA[");
//            bf.append(unifiedorder.getBody());
//            bf.append("]]></body>");
//
//
//            bf.append("<attach><![CDATA[");
//            bf.append(unifiedorder.getAttach());
//            bf.append("]]></attach>");
//
//            bf.append("<out_trade_no><![CDATA[");
//            bf.append(unifiedorder.getOut_trade_no());
//            bf.append("]]></out_trade_no>");
//
//            bf.append("<total_fee><![CDATA[");
//            bf.append(unifiedorder.getTotal_fee());
//            bf.append("]]></total_fee>");
//
//            bf.append("<spbill_create_ip><![CDATA[");
//            bf.append(unifiedorder.getSpbill_create_ip());
//            bf.append("]]></spbill_create_ip>");
//
//            bf.append("<notify_url><![CDATA[");
//            bf.append(unifiedorder.getNotify_url());
//            bf.append("]]></notify_url>");
//
//            bf.append("<trade_type><![CDATA[");
//            bf.append(unifiedorder.getTrade_type());
//            bf.append("]]></trade_type>");
//
//            bf.append("<scene_info><![CDATA[");
//            bf.append(unifiedorder.getScene_info());
//            bf.append("]]></scene_info>");
//
//            bf.append("</xml>");
//            return bf.toString();
//        }
//        return "";
//    }
//    /**
//     * 构造退款xml参数
//     * @param xml
//     * @return
//     */
//    public static String xmlTransfer(Transfers transfers){
//
//        if(transfers!=null){
//            StringBuffer bf = new StringBuffer();
//            bf.append("<xml>");
//
//            bf.append("<mch_appid><![CDATA[");
//            bf.append(transfers.getMch_appid());
//            bf.append("]]></mch_appid>");
//
//            bf.append("<mchid><![CDATA[");
//            bf.append(transfers.getMchid());
//            bf.append("]]></mchid>");
//
//            bf.append("<nonce_str><![CDATA[");
//            bf.append(transfers.getNonce_str());
//            bf.append("]]></nonce_str>");
//
//            bf.append("<sign><![CDATA[");
//            bf.append(transfers.getSign());
//            bf.append("]]></sign>");
//
//            bf.append("<partner_trade_no><![CDATA[");
//            bf.append(transfers.getPartner_trade_no());
//            bf.append("]]></partner_trade_no>");
//
//
//            bf.append("<openid><![CDATA[");
//            bf.append(transfers.getOpenid());
//            bf.append("]]></openid>");
//
//            bf.append("<check_name><![CDATA[");
//            bf.append(transfers.getCheck_name());
//            bf.append("]]></check_name>");
//
//            bf.append("<amount><![CDATA[");
//            bf.append(transfers.getAmount());
//            bf.append("]]></amount>");
//
//            bf.append("<desc><![CDATA[");
//            bf.append(transfers.getDesc());
//            bf.append("]]></desc>");
//
//            bf.append("<spbill_create_ip><![CDATA[");
//            bf.append(transfers.getSpbill_create_ip());
//            bf.append("]]></spbill_create_ip>");
//
//            bf.append("</xml>");
//            return bf.toString();
//        }
//        return "";
//    }
//    /**
//     * post请求并得到返回结果
//     * @param requestUrl
//     * @param requestMethod
//     * @param output
//     * @return
//     */
//    public static String httpsRequest(String requestUrl, String requestMethod, String output) {
//        try{
//            URL url = new URL(requestUrl);
//            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
//            connection.setDoOutput(true);
//            connection.setDoInput(true);
//            connection.setUseCaches(false);
//            connection.setRequestMethod(requestMethod);
//            if (null != output) {
//                OutputStream outputStream = connection.getOutputStream();
//                outputStream.write(output.getBytes("UTF-8"));
//                outputStream.close();
//            }
//            // 从输入流读取返回内容
//            InputStream inputStream = connection.getInputStream();
//            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
//            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//            String str = null;
//            StringBuffer buffer = new StringBuffer();
//            while ((str = bufferedReader.readLine()) != null) {
//                buffer.append(str);
//            }
//            bufferedReader.close();
//            inputStreamReader.close();
//            inputStream.close();
//            inputStream = null;
//            connection.disconnect();
//            return buffer.toString();
//        }catch(Exception ex){
//            ex.printStackTrace();
//        }
//        return "";
//    }
//}
